/** 定义一个echarts的标记对象 */
var echartsSignObj = echartsSignObj || new Map()
/**
 * @param {*} myChart echarts实例
 * @param {*} num 自动轮播axis数量 默认5个
 * @param {*} time 轮播间隔时间 默认3秒
 * @returns
 */
export const autoHover = (myChart, num = 5, time = 3000) => {
  /**
   * 如果过来的echart是已经存在的
   * 那么表示刷新数据
   * 这时候就要清除上一个echarts的定时任务
   * 并且重新开启新定时任务
   * 在下面会有一个记录定时任务的方法 echartsSignObj.set(myChart.id, timeTicket)
   **/
  if (echartsSignObj.has(myChart.id)) {
    clearInterval(echartsSignObj.get(myChart.id))
  }
  let count = 0
  let timeTicket = 0

  // 清除定时器
  function clearLoop() {
    if (timeTicket) {
      clearInterval(timeTicket)
      timeTicket = 0
    }

    myChart.off('mousemove', stopAutoShow)
    myChart.getZr().off('mousemove', zRenderMouseMove)
  }

  // 关闭轮播
  function stopAutoShow() {
    if (timeTicket) {
      clearInterval(timeTicket)
      timeTicket = 0
    }
  }

  function zRenderMouseMove(param) {
    if (param.event) {
      // 阻止canvas上的鼠标移动事件冒泡
      // param.event.cancelBubble = true;
    }
    stopAutoShow()
  }

  function autoRun() {
    myChart.dispatchAction({
      type: 'downplay',
      seriesIndex: 0, // serieIndex的索引值   可以触发多个
    })
    myChart.dispatchAction({
      type: 'highlight',
      seriesIndex: 0,
      dataIndex: count,
    })
    myChart.dispatchAction({
      type: 'showTip',
      seriesIndex: 0,
      dataIndex: count,
    })
    count++
    if (count >= num) {
      count = 0
    }
  }

  timeTicket && clearInterval(timeTicket)
  timeTicket = setInterval(function () {
    autoRun()
  }, time)

  /** 把定时器对应echarts的id做一个存储记录 */
  echartsSignObj.set(myChart.id, timeTicket)

  myChart.on('mouseover', function (params) {
    clearInterval(timeTicket)
    myChart.dispatchAction({
      type: 'downplay',
      seriesIndex: 0,
    })
    myChart.dispatchAction({
      type: 'highlight',
      seriesIndex: 0,
      dataIndex: params.dataIndex,
    })
    myChart.dispatchAction({
      type: 'showTip',
      seriesIndex: 0,
      dataIndex: params.dataIndex,
    })
  })

  myChart.on('mouseout', function () {
    timeTicket && clearInterval(timeTicket)
    timeTicket = setInterval(function () {
      autoRun()
    }, time)
  })
  return {
    clearLoop: clearLoop,
  }
}
